<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>基本引用类型-Date</title>

</head>

<body>

  <div id="first-date"></div>

  <script>
    doSomething = function () {
      setTimeout(() => {
        console.log("ok");
      }, 1000);
    }
    // Date.now()方法，返回表示方法执行时日期和时间的毫秒数
    // 起始时间
    let start = Date.now();
    console.log(start);
    // 调用函数
    doSomething();
    // 结束时间
    let stop = Date.now(),

    result = stop - start;
    console.log(result);
    /*
      日期格式化方法
      Date 类型有几个专门用于格式化日期的方法，它们都会返回字符串：
       toDateString()显示日期中的周几、月、日、年（格式特定于实现）；
       toTimeString()显示日期中的时、分、秒和时区（格式特定于实现）；
       toLocaleDateString()显示日期中的周几、月、日、年（格式特定于实现和地区）；
       toLocaleTimeString()显示日期中的时、分、秒（格式特定于实现和地区）；
       toUTCString()显示完整的 UTC 日期（格式特定于实现）。
      这些方法的输出与 toLocaleString()和 toString()一样，会因浏览器而异。因此不能用于在用户界面上一致地显示日期
    */ 
   // 创建一个当时的时间对象
   let d = new Date();



   console.log(d.toDateString());
   console.log(d.toTimeString());
   console.log(d.toLocaleDateString());
   console.log(d.toLocaleTimeString());
   console.log(d.toUTCString());

    /*
      getTime() 返回日期的毫秒表示；与 valueOf()相同
      setTime(milliseconds) 设置日期的毫秒表示，从而修改整个日期
      getFullYear() 返回 4 位数年（即 2019 而不是 19）
      getUTCFullYear() 返回 UTC 日期的 4 位数年
      setFullYear(year) 设置日期的年（ year 必须是 4 位数）
      setUTCFullYear(year) 设置 UTC 日期的年（ year 必须是 4 位数）
      getMonth() 返回日期的月（ 0 表示 1 月， 11 表示 12 月）
      getUTCMonth() 返回 UTC 日期的月（ 0 表示 1 月， 11 表示 12 月）
      setMonth(month) 设置日期的月（ month 为大于 0 的数值，大于 11 加年）
      setUTCMonth(month) 设置 UTC 日期的月（ month 为大于 0 的数值，大于 11 加年）
      getDate() 返回日期中的日（ 1~31）
      getUTCDate() 返回 UTC 日期中的日（ 1~31）
      setDate(date) 设置日期中的日（如果 date 大于该月天数，则加月）
      setUTCDate(date) 设置 UTC 日期中的日（如果 date 大于该月天数，则加月）
      getDay() 返回日期中表示周几的数值（ 0 表示周日， 6 表示周六）
      getUTCDay() 返回 UTC 日期中表示周几的数值（ 0 表示周日， 6 表示周六）
      getHours() 返回日期中的时（ 0~23）
      getUTCHours() 返回 UTC 日期中的时（ 0~23）
      setHours(hours) 设置日期中的时（如果 hours 大于 23，则加日）
      setUTCHours(hours) 设置 UTC 日期中的时（如果 hours 大于 23，则加日）
      getMinutes() 返回日期中的分（ 0~59）
      getUTCMinutes() 返回 UTC 日期中的分（ 0~59）
      setMinutes(minutes) 设置日期中的分（如果 minutes 大于 59，则加时）
      setUTCMinutes(minutes) 设置 UTC 日期中的分（如果 minutes 大于 59，则加时）
      getSeconds() 返回日期中的秒（ 0~59）
      getUTCSeconds() 返回 UTC 日期中的秒（ 0~59）
      setSeconds(seconds) 设置日期中的秒（如果 seconds 大于 59，则加分）
      setUTCSeconds(seconds) 设置 UTC 日期中的秒（如果 seconds 大于 59，则加分）
      getMilliseconds() 返回日期中的毫秒
      getUTCMilliseconds() 返回 UTC 日期中的毫秒
      setMilliseconds(milliseconds) 设置日期中的毫秒
      setUTCMilliseconds(milliseconds) 设置 UTC 日期中的毫秒
      getTimezoneOffset() 返回以分钟计的 UTC 与本地时区的偏移量（如美国 EST 即“东部标准时间”返回 300，进入夏令时的地区可能有所差异）
    */

    // 辅助函数 Date.parse("May 23, 2019")
    // “月 / 日 / 年”，如"5/23/2019"；
    // “月名 日, 年”，如"May 23, 2019"；
    // （year, month-1, day）
    // “周几 月名 日 年 时: 分: 秒 时区”，如"Tue May 23 2019 00:00:00 GMT-0700"；
    let someDate = new Date(Date.parse("May 23, 2019"));
    let some1Date = new Date("May 29, 2020");
    let some2Date = new Date("5/24/2020");
    let date1 = new Date(2019, 0, 1); // 2019 年 1 月 1 日
    let date2 = new Date(2019, 1, 1);
    console.log(someDate);
    console.log(some1Date);
    console.log(date1);

    //  Date.UTC()
    // GMT 时间 2000 年 1 月 1 日零点
    let y2k = new Date(Date.UTC(2000, 0));
    // GMT 时间 2005 年 5 月 5 日下午 5 点 55 分 55 秒
    let allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

    console.log(some2Date);

  </script>
</body>

</html>